#include "bsp.h"
#include "axis.h"
uint8_t bsp_get_in(uint8_t idx)
{
    uint8_t res = 0;
    switch (idx)
    {
    case IN1:
        res = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_3);
        break;
    case IN2:
        res = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_12);
        break;
    case IN3:
        res = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_11);
        break;
    case IN4:
        res = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_10);
        break;
    case IN5:
        res = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_2);
        break;
    case IN6:
        res = HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_2);
        break;
    case IN7:
        res = HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_1);
        break;
    case IN8:
        res = HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_0);
        break;
    case IN9:
        res = HAL_GPIO_ReadPin(GPIOI, GPIO_PIN_7);
        break;
    case IN10:
        res = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8);
        break;
    case IN11:
        res = HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_4);
        break;
    case IN12:
        res = HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_3);
        break;
    case IN13:
        res = HAL_GPIO_ReadPin(GPIOI, GPIO_PIN_4);
        break;
    case IN14:
        res = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_1);
        break;
    case IN15:
        res = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_0);
        break;
    case IN16:
        res = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_9);
        break;
    
    default:
        break;
    }
    return res;
}

void bsp_set_out(uint8_t idx,GPIO_PinState status)
{
    switch (idx)
    {
    case OUT1:
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_14,status);
        break;
    case OUT2:
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_15,status);
        break;
    case OUT3:
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8,status);
        break;
    case OUT4:
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10,status);
        break;
    case OUT5:
        HAL_GPIO_WritePin(GPIOF, GPIO_PIN_15,status);
        break;
    case OUT6:
        HAL_GPIO_WritePin(GPIOG, GPIO_PIN_0,status);
        break;
    case OUT7:
        HAL_GPIO_WritePin(GPIOF, GPIO_PIN_11,status);
        break;
    case OUT8:
        HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12,status);
        break;
    case OUT9:
        HAL_GPIO_WritePin(GPIOH, GPIO_PIN_8,status);
        break;
    case OUT10:
        HAL_GPIO_WritePin(GPIOH, GPIO_PIN_7,status);
        break;
    case OUT11:
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_13,status);
        break;
    case OUT12:
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12,status);
        break;
    case OUT13:
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7,status);
        break;
    case OUT14:
        HAL_GPIO_WritePin(GPIOG, GPIO_PIN_1,status);
        break;
    case OUT15:
        HAL_GPIO_WritePin(GPIOF, GPIO_PIN_14,status);
        break;
    case OUT16:
        HAL_GPIO_WritePin(GPIOF, GPIO_PIN_13,status);
        break;
    
    default:
        break;
    }
}
uint8_t bsp_get_out(uint8_t idx)
{
    uint8_t res = 0;
    switch (idx)
    {
    case OUT1:
        res = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_14);
        break;
    case OUT2:
        res = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_15);
        break;
    case OUT3:
        res = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_8);
        break;
    case OUT4:
        res = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_10);
        break;
    case OUT5:
        res = HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_15);
        break;
    case OUT6:
        res = HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_0);
        break;
    case OUT7:
        res = HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_11);
        break;
    case OUT8:
        res = HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_12);
        break;
    case OUT9:
        res = HAL_GPIO_ReadPin(GPIOH, GPIO_PIN_8);
        break;
    case OUT10:
        res = HAL_GPIO_ReadPin(GPIOH, GPIO_PIN_7);
        break;
    case OUT11:
        res = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_13);
        break;
    case OUT12:
        res = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_12);
        break;
    case OUT13:
        res = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_7);
        break;
    case OUT14:
        res = HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_1);
        break;
    case OUT15:
        res = HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_14);
        break;
    case OUT16:
        res = HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_13);
        break;
    
    default:
        break;
    }
    return res;
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    switch (GPIO_Pin)
    {
    case IN1_Pin:
        /* code */
        mt_sonser_action(1,HAL_GPIO_ReadPin(IN1_GPIO_Port, IN1_Pin));
        break;
    case IN2_Pin:
        /* code */
        mt_sonser_action(2,HAL_GPIO_ReadPin(IN2_GPIO_Port, IN2_Pin));
        break;
    case IN3_Pin:
        /* code */
        mt_sonser_action(3,HAL_GPIO_ReadPin(IN3_GPIO_Port, IN3_Pin));
        break;
    case IN4_Pin:
        /* code */
        mt_sonser_action(4,HAL_GPIO_ReadPin(IN4_GPIO_Port, IN4_Pin));
        break;
    
    default:
        break;
    }
}
